Lista 7 · Matrizes Bidimensionais em Linguagem C
Para facilitar o entendimento, use sempre esta notação:
| Variável | Significado | Exemplo |
|---|---|---|
| L | Linha da matriz | L = 0, 1, 2, ... |
| C | Coluna da matriz | C = 0, 1, 2, ... |
| D | Dimensão (tamanho) da matriz quadrada | D = 3 (matriz 3×3)D = 4 (matriz 4×4) |
💡 Exemplo de declaração:
int D = 4; // Dimensão da matriz float matriz[D][D]; // Matriz quadrada D×D int L, C; // Índices: Linha e Coluna
Se um vetor é um prédio com vários apartamentos enfileirados...
Uma matriz é como um prédio com VÁRIOS ANDARES, onde cada andar tem vários apartamentos.
int D = 3; int matriz[D][D]; // D linhas × D colunas = D² elementos float M[4][4]; // D=4: 4 linhas × 4 colunas = 16 elementos int dados[6][6]; // D=6: 6 linhas × 6 colunas = 36 elementos
📝 Regra de ouro: O primeiro colchete é sempre a LINHA (L), o segundo é a COLUNA (C).
matriz[L][C]
⚠️ Este é o coração da Lista 7! Se você entender as diagonais, resolve todos os exercícios.
📝 Notação: L = Linha, C = Coluna, D = Dimensão da matriz
A diagonal principal vai do canto superior esquerdo ao inferior direito.
Condição: L == C (Linha igual a Coluna)
Posições: (0,0), (1,1), (2,2), (3,3) → L == C
A diagonal secundária vai do canto superior direito ao inferior esquerdo.
Condição: L + C == D - 1
Posições: (0,3), (1,2), (2,1), (3,0) → L + C == D - 1 → L + C == 3
| Região | Condição Geral | Exemplo D=4 |
|---|---|---|
| Diagonal Principal | L == C | (0,0)(1,1)(2,2)(3,3) |
| Diagonal Secundária | L + C == D - 1 | L+C=3: (0,3)(1,2)(2,1)(3,0) |
| Acima da Principal | C > L | Triângulo superior direito |
| Abaixo da Principal | C < L | Triângulo inferior esquerdo |
| Acima da Secundária | L + C < D - 1 | L+C < 3 |
| Abaixo da Secundária | L + C > D - 1 | L+C > 3 |
int D = 4; int matriz[D][D]; for(L = 0; L < D; L++) { for(C = 0; C < D; C++) { scanf("%d", &matriz[L][C]); } }
int D = 5; int matriz[D][D]; int soma = 0; // ... leitura da matriz ... for(L = 0; L < D; L++) { soma += matriz[L][L]; } printf("Soma diagonal principal: %d\n", soma);
// Acima da diagonal principal (C > L) for(L=0; L<D; L++) for(C=0; C<D; C++) if(C > L) soma_acima += matriz[L][C]; // Abaixo da diagonal secundária (L + C > D-1) for(L=0; L<D; L++) for(C=0; C<D; C++) if(L + C > D - 1) soma_abaixo += matriz[L][C];
for(L=0; L<D; L++) { for(C=0; C<D; C++) { int num = matriz[L][C]; int soma_div = 0; for(int k = 1; k <= num/2; k++) if(num % k == 0) soma_div += k; if(soma_div == num) printf("%d é perfeito\n", num); } }
float prod_princ = 1, prod_sec = 1; for(L=0; L<D; L++) { prod_princ *= matriz[L][L]; prod_sec *= matriz[L][D-1-L]; }
tipo nome[D][D]for(L) for(C) scanfL == C
L + C == D-1
C > L
L + C > D-1
| Exercício | D | Condição(ões) |
|---|---|---|
| 1 - Diagonal Secundária | 6 | L + C == 5 |
| 2 - Cópia Inversa | 3 | M2[2-L][2-C] = M1[L][C] |
| 3 - Soma Diagonal Principal | 5 | L == C |
| 4 - Acima/Abaixo Principal | 4 | C > L e C < L |
| 5 - Números Perfeitos | 3 | Divisores: num % k == 0 |
| 6 - Maior Somatório Diagonais | 4 | L == C e L + C == 3 |
| 7 - Acima/Abaixo Secundária | 5 | L + C < 4 e L + C > 4 |
| 8 - Produto Diagonais | 4 | L == C e L + C == 3 |
📐 Lembre-se: L = Linha, C = Coluna, D = Dimensão
Domine as diagonais e você dominará as matrizes! 🚀